canopy/www/doc/server/queue.html

6686 lines
79 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Class: queue</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Class: queue</h1>
<section>
<header>
<h2><span class="attribs"><span class="type-signature"></span></span>queue<span class="signature">(server, chanDB, channel)</span><span class="type-signature"></span></h2>
<div class="class-description">Object represneting a single channel's media queue</div>
</header>
<article>
<div class="container-overview">
<h2>Constructor</h2>
<h4 class="name" id="queue"><span class="type-signature"></span>new queue<span class="signature">(server, chanDB, channel)</span><span class="type-signature"></span></h4>
<div class="description">
Instantiates a new media queue for a given channel
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>server</code></td>
<td class="type">
<span class="param-type"><a href="channelManager.html">channelManager</a></span>
</td>
<td class="description last">Parent server object</td>
</tr>
<tr>
<td class="name"><code>chanDB</code></td>
<td class="type">
<span class="param-type">Document</span>
</td>
<td class="description last">Related Channel Document from DB</td>
</tr>
<tr>
<td class="name"><code>channel</code></td>
<td class="type">
<span class="param-type"><a href="activeChannel.html">activeChannel</a></span>
</td>
<td class="description last">Parent Channel object for desired channel queue</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line29">line 29</a>
</li></ul></dd>
</dl>
</div>
<h3 class="subsection-title">Members</h3>
<h4 class="name" id="channel"><span class="type-signature"></span>channel<span class="type-signature"></span></h4>
<div class="description">
Parent Chennel Object for desired channel queue
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line44">line 44</a>
</li></ul></dd>
</dl>
<h4 class="name" id="liveMode"><span class="type-signature"></span>liveMode<span class="type-signature"></span></h4>
<div class="description">
Current live-stream schedule mode
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line89">line 89</a>
</li></ul></dd>
</dl>
<h4 class="name" id="liveRemainder"><span class="type-signature"></span>liveRemainder<span class="type-signature"></span></h4>
<div class="description">
Media interrupted by current live-stream
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line85">line 85</a>
</li></ul></dd>
</dl>
<h4 class="name" id="locked"><span class="type-signature"></span>locked<span class="type-signature"></span></h4>
<div class="description">
Locks schedule upon admin request
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line98">line 98</a>
</li></ul></dd>
</dl>
<h4 class="name" id="nextTimer"><span class="type-signature"></span>nextTimer<span class="type-signature"></span></h4>
<div class="description">
Next Media Timer
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line73">line 73</a>
</li></ul></dd>
</dl>
<h4 class="name" id="nowPlaying"><span class="type-signature"></span>nowPlaying<span class="type-signature"></span></h4>
<div class="description">
Currently Playing Media Item
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line81">line 81</a>
</li></ul></dd>
</dl>
<h4 class="name" id="preSwitchDelta"><span class="type-signature"></span>preSwitchDelta<span class="type-signature"></span></h4>
<div class="description">
Time before media switch to run pre-switch method call against next media
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line64">line 64</a>
</li></ul></dd>
</dl>
<h4 class="name" id="preSwitchTimer"><span class="type-signature"></span>preSwitchTimer<span class="type-signature"></span></h4>
<div class="description">
Next Media Pre-Switch Timer
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line77">line 77</a>
</li></ul></dd>
</dl>
<h4 class="name" id="schedule"><span class="type-signature"></span>schedule<span class="type-signature"></span></h4>
<div class="description">
Map containing current schedule
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line49">line 49</a>
</li></ul></dd>
</dl>
<h4 class="name" id="server"><span class="type-signature"></span>server<span class="type-signature"></span></h4>
<div class="description">
Parent Server Object
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line40">line 40</a>
</li></ul></dd>
</dl>
<h4 class="name" id="streamLock"><span class="type-signature"></span>streamLock<span class="type-signature"></span></h4>
<div class="description">
Locks scheduling functionality during livestreams
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line94">line 94</a>
</li></ul></dd>
</dl>
<h4 class="name" id="syncDelta"><span class="type-signature"></span>syncDelta<span class="type-signature"></span></h4>
<div class="description">
Sync Delta in MS
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line54">line 54</a>
</li></ul></dd>
</dl>
<h4 class="name" id="syncTimer"><span class="type-signature"></span>syncTimer<span class="type-signature"></span></h4>
<div class="description">
Syncronization Timer
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line69">line 69</a>
</li></ul></dd>
</dl>
<h4 class="name" id="timestamp"><span class="type-signature"></span>timestamp<span class="type-signature"></span></h4>
<div class="description">
Current Timestamp in Media
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line58">line 58</a>
</li></ul></dd>
</dl>
<h3 class="subsection-title">Methods</h3>
<h4 class="name" id="broadcastQueue"><span class="type-signature">(async) </span>broadcastQueue<span class="signature">(chanDB)</span><span class="type-signature"></span></h4>
<div class="description">
Broadcasts channel queue
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>chanDB</code></td>
<td class="type">
<span class="param-type">Mongoose.Document</span>
</td>
<td class="description last">Pass through Channel Document to save on DB Transactions</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1602">line 1602</a>
</li></ul></dd>
</dl>
<h4 class="name" id="defineListeners"><span class="type-signature"></span>defineListeners<span class="signature">(socket)</span><span class="type-signature"></span></h4>
<div class="description">
Defines server-side socket.io listeners for newly connected sockets
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>socket</code></td>
<td class="type">
<span class="param-type">Socket</span>
</td>
<td class="description last">Newly connected socket to define listeners against</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line108">line 108</a>
</li></ul></dd>
</dl>
<h4 class="name" id="deleteMedia"><span class="type-signature">(async) </span>deleteMedia<span class="signature">(socket, data)</span><span class="type-signature"></span></h4>
<div class="description">
Processes client requests to delete queued media
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>socket</code></td>
<td class="type">
<span class="param-type">Socket</span>
</td>
<td class="description last">Requesting socket</td>
</tr>
<tr>
<td class="name"><code>data</code></td>
<td class="type">
<span class="param-type">Object</span>
</td>
<td class="description last">Event payload</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line207">line 207</a>
</li></ul></dd>
</dl>
<h4 class="name" id="deleteRange"><span class="type-signature">(async) </span>deleteRange<span class="signature">(socket, data)</span><span class="type-signature"></span></h4>
<div class="description">
Processes request to delete a range of media items from the queue
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>socket</code></td>
<td class="type">
<span class="param-type">Socket</span>
</td>
<td class="description last">Requesting socket</td>
</tr>
<tr>
<td class="name"><code>data</code></td>
<td class="type">
<span class="param-type">Object</span>
</td>
<td class="description last">Event payload</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line234">line 234</a>
</li></ul></dd>
</dl>
<h4 class="name" id="end"><span class="type-signature">(async) </span>end<span class="signature">(quiet, noArchive, volatile, chanDB)</span><span class="type-signature"></span></h4>
<div class="description">
End currently playing media
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>quiet</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
false
</td>
<td class="description last">Enable to prevent ending the media client-side</td>
</tr>
<tr>
<td class="name"><code>noArchive</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
false
</td>
<td class="description last">Enable to prevent ended media from being written to channel archive. Deletes media if Volatile is false</td>
</tr>
<tr>
<td class="name"><code>volatile</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
false
</td>
<td class="description last">Enable to prevent DB Transactions</td>
</tr>
<tr>
<td class="name"><code>chanDB</code></td>
<td class="type">
<span class="param-type">Mongoose.Document</span>
</td>
<td class="default">
</td>
<td class="description last">Pass through Channel Document to save on DB Transactions</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1128">line 1128</a>
</li></ul></dd>
</dl>
<h4 class="name" id="endLivestream"><span class="type-signature">(async) </span>endLivestream<span class="signature">(wasPlaying, chanDB)</span><span class="type-signature"></span></h4>
<div class="description">
Ends running Livestream
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>wasPlaying</code></td>
<td class="type">
<span class="param-type"><a href="queuedMedia.html">queuedMedia</a></span>
</td>
<td class="description last">Media object that was playing while we started the Livestream</td>
</tr>
<tr>
<td class="name"><code>chanDB</code></td>
<td class="type">
<span class="param-type">Mongoose.Document</span>
</td>
<td class="description last">Pass through Channel Document to save on DB Transactions</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1212">line 1212</a>
</li></ul></dd>
</dl>
<h4 class="name" id="getItemAtEpoch"><span class="type-signature"></span>getItemAtEpoch<span class="signature">(epoch)</span><span class="type-signature"> &rarr; {<a href="queuedMedia.html">queuedMedia</a>}</span></h4>
<div class="description">
Gets a media item by epoch
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>epoch</code></td>
<td class="type">
<span class="param-type">Number</span>
</td>
<td class="description last">Date to check by JS Epoch (Millis)</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1500">line 1500</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
found media item
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type"><a href="queuedMedia.html">queuedMedia</a></span>
</dd>
</dl>
<h4 class="name" id="getItemByUUID"><span class="type-signature"></span>getItemByUUID<span class="signature">(uuid)</span><span class="type-signature"> &rarr; {<a href="queuedMedia.html">queuedMedia</a>}</span></h4>
<div class="description">
Get Scheduled Item by UUID
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>uuid</code></td>
<td class="type">
<span class="param-type">String</span>
</td>
<td class="description last">UUID of item to reschedule</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1564">line 1564</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
found item
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type"><a href="queuedMedia.html">queuedMedia</a></span>
</dd>
</dl>
<h4 class="name" id="getItemsBetweenEpochs"><span class="type-signature"></span>getItemsBetweenEpochs<span class="signature">(start, end, noUnfinished)</span><span class="type-signature"> &rarr; {<a href="queuedMedia.html">queuedMedia</a>}</span></h4>
<div class="description">
Returns scheduled media between two given datetimes
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>start</code></td>
<td class="type">
<span class="param-type">Number</span>
</td>
<td class="default">
</td>
<td class="description last">Start date by JS Epoch (Millis)</td>
</tr>
<tr>
<td class="name"><code>end</code></td>
<td class="type">
<span class="param-type">Number</span>
</td>
<td class="default">
</td>
<td class="description last">End date by JS Epoch (Millis)</td>
</tr>
<tr>
<td class="name"><code>noUnfinished</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
false
</td>
<td class="description last">Enable to include currently playing media</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1475">line 1475</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
Found Media Objects
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type"><a href="queuedMedia.html">queuedMedia</a></span>
</dd>
</dl>
<h4 class="name" id="getLastItem"><span class="type-signature"></span>getLastItem<span class="signature">(epoch)</span><span class="type-signature"></span></h4>
<div class="description">
Gets last item from a given epoch
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>epoch</code></td>
<td class="type">
<span class="param-type">Number</span>
</td>
<td class="description last">Date to check by JS Epoch (Millis), defaults to now</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1519">line 1519</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
Last played item
</div>
<h4 class="name" id="getNextItem"><span class="type-signature"></span>getNextItem<span class="signature">(epoch)</span><span class="type-signature"> &rarr; {<a href="queuedMedia.html">queuedMedia</a>}</span></h4>
<div class="description">
Gets next item from a given epoch
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>epoch</code></td>
<td class="type">
<span class="param-type">Number</span>
</td>
<td class="description last">Date to check by JS Epoch (Millis), defaults to now</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1549">line 1549</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
Next item on the schedule
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type"><a href="queuedMedia.html">queuedMedia</a></span>
</dd>
</dl>
<h4 class="name" id="getStart"><span class="type-signature"></span>getStart<span class="signature">(start)</span><span class="type-signature"></span></h4>
<div class="description">
Validates start times, and replaces bad ones with 5ms in the future
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>start</code></td>
<td class="type">
<span class="param-type">Number</span>
</td>
<td class="description last">Start time to validate by JS Epoch (millis)</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line436">line 436</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
Start time as JS Epoch (millis)
</div>
<h4 class="name" id="goLive"><span class="type-signature">(async) </span>goLive<span class="signature">(socket, data)</span><span class="type-signature"></span></h4>
<div class="description">
Handle client request to start an HLS live stream
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>socket</code></td>
<td class="type">
<span class="param-type">Socket</span>
</td>
<td class="description last">Requesting socket</td>
</tr>
<tr>
<td class="name"><code>data</code></td>
<td class="type">
<span class="param-type">Object</span>
</td>
<td class="description last">Event payload</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line318">line 318</a>
</li></ul></dd>
</dl>
<h4 class="name" id="handleRawRefresh"><span class="type-signature">(async) </span>handleRawRefresh<span class="signature">(mediaObj)</span><span class="type-signature"> &rarr; {<a href="queuedMedia.html">queuedMedia</a>}</span></h4>
<div class="description">
Refreshes expired raw links before media plays
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>mediaObj</code></td>
<td class="type">
<span class="param-type"><a href="queuedMedia.html">queuedMedia</a></span>
</td>
<td class="description last">Media object that's about to play</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1007">line 1007</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
passes through Media object with updated link upon success
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type"><a href="queuedMedia.html">queuedMedia</a></span>
</dd>
</dl>
<h4 class="name" id="livestreamOverwriteSchedule"><span class="type-signature">(async) </span>livestreamOverwriteSchedule<span class="signature">(wasPlaying, chanDB)</span><span class="type-signature"></span></h4>
<div class="description">
Overwrites livestream over scheduled media content after it has ended
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>wasPlaying</code></td>
<td class="type">
<span class="param-type"><a href="queuedMedia.html">queuedMedia</a></span>
</td>
<td class="description last">Media object that was playing while we started the Livestream</td>
</tr>
<tr>
<td class="name"><code>chanDB</code></td>
<td class="type">
<span class="param-type">Mongoose.Document</span>
</td>
<td class="description last">Pass through Channel Document to save on DB Transactions</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1268">line 1268</a>
</li></ul></dd>
</dl>
<h4 class="name" id="livestreamPushbackSchedule"><span class="type-signature">(async) </span>livestreamPushbackSchedule<span class="signature">(wasPlaying, chanDB)</span><span class="type-signature"></span></h4>
<div class="description">
Pushes back any missed content scheduled during Livestream after Livestream has ended.
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>wasPlaying</code></td>
<td class="type">
<span class="param-type"><a href="queuedMedia.html">queuedMedia</a></span>
</td>
<td class="description last">Media object that was playing while we started the Livestream</td>
</tr>
<tr>
<td class="name"><code>chanDB</code></td>
<td class="type">
<span class="param-type">Mongoose.Document</span>
</td>
<td class="description last">Pass through Channel Document to save on DB Transactions</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1357">line 1357</a>
</li></ul></dd>
</dl>
<h4 class="name" id="moveMedia"><span class="type-signature">(async) </span>moveMedia<span class="signature">(socket, data)</span><span class="type-signature"></span></h4>
<div class="description">
Processes request to move queued media item
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>socket</code></td>
<td class="type">
<span class="param-type">Socket</span>
</td>
<td class="description last">Requesting socket</td>
</tr>
<tr>
<td class="name"><code>data</code></td>
<td class="type">
<span class="param-type">Object</span>
</td>
<td class="description last">Event payload</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line267">line 267</a>
</li></ul></dd>
</dl>
<h4 class="name" id="preSwitch"><span class="type-signature">(async) </span>preSwitch<span class="signature">(mediaObj)</span><span class="type-signature"></span></h4>
<div class="description">
Called 10 seconds before media begins to play
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>mediaObj</code></td>
<td class="type">
<span class="param-type"><a href="queuedMedia.html">queuedMedia</a></span>
</td>
<td class="description last">Media object that's about to play</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line998">line 998</a>
</li></ul></dd>
</dl>
<h4 class="name" id="prepQueue"><span class="type-signature">(async) </span>prepQueue<span class="signature">(chanDB)</span><span class="type-signature"></span></h4>
<div class="description">
Prepares channel queue for network transmission
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>chanDB</code></td>
<td class="type">
<span class="param-type">Mongoose.Document</span>
</td>
<td class="description last">Pass through Channel Document to save on DB Transactions</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1611">line 1611</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
de-hydrated scehdule information
</div>
<h4 class="name" id="queueURL"><span class="type-signature">(async) </span>queueURL<span class="signature">(socket, data)</span><span class="type-signature"></span></h4>
<div class="description">
Accepts new URL's to queue from the client
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>socket</code></td>
<td class="type">
<span class="param-type">Socket</span>
</td>
<td class="description last">Socket we're receiving the URL from</td>
</tr>
<tr>
<td class="name"><code>data</code></td>
<td class="type">
<span class="param-type">Object</span>
</td>
<td class="description last">Event payload</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line125">line 125</a>
</li></ul></dd>
</dl>
<h4 class="name" id="refreshNextTimer"><span class="type-signature"></span>refreshNextTimer<span class="signature">(volatile)</span><span class="type-signature"></span></h4>
<div class="description">
Calculates next item to play, and sets timer to play it at it's scheduled start
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>volatile</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
false
</td>
<td class="description last">Disables DB Transactions if true</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line471">line 471</a>
</li></ul></dd>
</dl>
<h4 class="name" id="rehydrateQueue"><span class="type-signature">(async) </span>rehydrateQueue<span class="signature">(chanDB)</span><span class="type-signature"></span></h4>
<div class="description">
Rehydrates media schedule from DB
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>chanDB</code></td>
<td class="type">
<span class="param-type">Mongoose.Document</span>
</td>
<td class="description last">Pass through Channel Document to save on DB Transactions</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1669">line 1669</a>
</li></ul></dd>
</dl>
<h4 class="name" id="removeMedia"><span class="type-signature">(async) </span>removeMedia<span class="signature">(uuid, socket, chanDB, noScheduling)</span><span class="type-signature"> &rarr; {Media}</span></h4>
<div class="description">
Removes a media item
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>uuid</code></td>
<td class="type">
<span class="param-type">String</span>
</td>
<td class="default">
</td>
<td class="description last">UUID of item to reschedule</td>
</tr>
<tr>
<td class="name"><code>socket</code></td>
<td class="type">
<span class="param-type">Socket</span>
</td>
<td class="default">
</td>
<td class="description last">Requesting Socket</td>
</tr>
<tr>
<td class="name"><code>chanDB</code></td>
<td class="type">
<span class="param-type">Mongoose.Document</span>
</td>
<td class="default">
</td>
<td class="description last">Channnel Document Passthrough to save on DB Access</td>
</tr>
<tr>
<td class="name"><code>noScheduling</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
false
</td>
<td class="description last">Disables schedule timer refresh if true</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line678">line 678</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
Deleted Media Item
</div>
<dl>
<dt>
Type
</dt>
<dd>
<span class="param-type">Media</span>
</dd>
</dl>
<h4 class="name" id="removeRange"><span class="type-signature">(async) </span>removeRange<span class="signature">(start, end, socket, noUnfinished)</span><span class="type-signature"></span></h4>
<div class="description">
Removes range of media items from the queue
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>start</code></td>
<td class="type">
<span class="param-type">Number</span>
</td>
<td class="default">
</td>
<td class="description last">Start date by JS Epoch (millis)</td>
</tr>
<tr>
<td class="name"><code>end</code></td>
<td class="type">
<span class="param-type">Number</span>
</td>
<td class="default">
</td>
<td class="description last">End date by JS Epoch (millis)</td>
</tr>
<tr>
<td class="name"><code>socket</code></td>
<td class="type">
<span class="param-type">Socket</span>
</td>
<td class="default">
</td>
<td class="description last">Requesting Socket</td>
</tr>
<tr>
<td class="name"><code>noUnfinished</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
false
</td>
<td class="description last">Set to true to include items that may be currently playing</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line521">line 521</a>
</li></ul></dd>
</dl>
<h4 class="name" id="rescheduleMedia"><span class="type-signature">(async) </span>rescheduleMedia<span class="signature">(uuid, start, socket, chanDB)</span><span class="type-signature"></span></h4>
<div class="description">
Reschedules a media item
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>uuid</code></td>
<td class="type">
<span class="param-type">String</span>
</td>
<td class="description last">UUID of item to reschedule</td>
</tr>
<tr>
<td class="name"><code>start</code></td>
<td class="type">
<span class="param-type">Number</span>
</td>
<td class="description last">New start time by JS Epoch (Millis)</td>
</tr>
<tr>
<td class="name"><code>socket</code></td>
<td class="type">
<span class="param-type">Socket</span>
</td>
<td class="description last">Requesting Socket</td>
</tr>
<tr>
<td class="name"><code>chanDB</code></td>
<td class="type">
<span class="param-type">Mongoose.Document</span>
</td>
<td class="description last">Channnel Document Passthrough to save on DB Access</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line573">line 573</a>
</li></ul></dd>
</dl>
<h4 class="name" id="scheduleMedia"><span class="type-signature">(async) </span>scheduleMedia<span class="signature">(media, socket, chanDB, force, volatile, startVolatile, saveLate, noSave)</span><span class="type-signature"></span></h4>
<div class="description">
Schedules a Media Item
This is a fun method and I think it deserves it's own little explination...
Since we're working with a time based schedule, using start epochs as keys for our iterable seemed the best option
I don't want to store everything in a sparse array because that *feels* icky, and would probably be a pain in the ass.
Maps seem like a good choice, if it wheren't for the issue of keeping them ordered...
That's where this comes in. You see if we temporarily store it in a sparse array and convert into a map,
we can quickly and easily create a properly sorted schedule map that, out side of adding items, behaves normally.
Also a note on preformance:
While .forEach ONLY runs through populated items in sparse arrays, many JS implementations run through them in the background,
simply skipping them before executing the provided function. Looping through object.keys(arr), however, avoids this entirely,
since it ONLY loops through defiened items within the array. No skipped empties for your runtime to worry about.
Even more preformance benefits can be had by using a real for loop on the arrays keys, skipping the overhead of forEach entirely.
This might seem gross but it completely avoids the computational workload of a sorting algo, especially when you consider
that, no matter what, re-ordering the schedule map would've required us to iterate through and rebuild the map anyways...
Also it looks like due to implementation limitations, epochs stored as MS are too large for array elements, so we store them there as seconds.
This also means that our current implementation will break exactly on unix epoch 4294967295 (Feb 7, 2106 6:28:15 AM UTC)
Hopefully javascript arrays will allow for larger lengths by then. If not blame the W3C :P
If for some reason they haven't and we're not dead, we could probably implement an object that wraps a 2d array and set/gets it using modulo/devision/multiplication
Further Reading:
https://stackoverflow.com/questions/59480871/foreach-vs-object-keys-foreach-performance-on-sparse-arrays
https://community.appsmith.com/content/blog/dark-side-foreach-why-you-should-think-twice-using-it
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>media</code></td>
<td class="type">
<span class="param-type">Media</span>
</td>
<td class="default">
</td>
<td class="description last">Media item to schedule</td>
</tr>
<tr>
<td class="name"><code>socket</code></td>
<td class="type">
<span class="param-type">Socket</span>
</td>
<td class="default">
</td>
<td class="description last">Requesting Socket</td>
</tr>
<tr>
<td class="name"><code>chanDB</code></td>
<td class="type">
<span class="param-type">Mongoose.Document</span>
</td>
<td class="default">
</td>
<td class="description last">Channnel Document Passthrough to save on DB Access</td>
</tr>
<tr>
<td class="name"><code>force</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
false
</td>
<td class="description last">Ignore certain conditions that would prevent scehduling and play the bitch anyways, used for internal function calls</td>
</tr>
<tr>
<td class="name"><code>volatile</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
false
</td>
<td class="description last">Prevent DB Writes, used for internal function calls</td>
</tr>
<tr>
<td class="name"><code>startVolatile</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
false
</td>
<td class="description last">Runs refreshNextTimer calls without DB writes, used for internal function calls</td>
</tr>
<tr>
<td class="name"><code>saveLate</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
false
</td>
<td class="description last">Saves items even if they're about to, or have already started. Used for internal function calls</td>
</tr>
<tr>
<td class="name"><code>noSave</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
false
</td>
<td class="description last">Allows function to edit Channel Document, but not save. Used for internal function calls in which the channel document is passed through, but will be saved immediatly after the scheduleMedia() call.</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line848">line 848</a>
</li></ul></dd>
</dl>
<h4 class="name" id="sendMedia"><span class="type-signature"></span>sendMedia<span class="signature">(socket)</span><span class="type-signature"></span></h4>
<div class="description">
Send media update to a specific socket or broadcast it to the entire channel
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>socket</code></td>
<td class="type">
<span class="param-type">Socket</span>
</td>
<td class="description last">Requesting Socket</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1579">line 1579</a>
</li></ul></dd>
</dl>
<h4 class="name" id="start"><span class="type-signature">(async) </span>start<span class="signature">(mediaObj, timestamp, volatile)</span><span class="type-signature"></span></h4>
<div class="description">
Kicks off a media item
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>mediaObj</code></td>
<td class="type">
<span class="param-type"><a href="queuedMedia.html">queuedMedia</a></span>
</td>
<td class="default">
</td>
<td class="description last">Media object that's about to play</td>
</tr>
<tr>
<td class="name"><code>timestamp</code></td>
<td class="type">
<span class="param-type">Number</span>
</td>
<td class="default">
</td>
<td class="description last">Media start timestamp in seconds</td>
</tr>
<tr>
<td class="name"><code>volatile</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
false
</td>
<td class="description last">Disables DB Transactions</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1027">line 1027</a>
</li></ul></dd>
</dl>
<h4 class="name" id="stop"><span class="type-signature"></span>stop<span class="signature">(socket)</span><span class="type-signature"></span></h4>
<div class="description">
Stops currently playing media item
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>socket</code></td>
<td class="type">
<span class="param-type">Socket</span>
</td>
<td class="description last">Requesting Socket</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1443">line 1443</a>
</li></ul></dd>
</dl>
<h5>Returns:</h5>
<div class="param-desc">
returns false if there is nothing to stop
</div>
<h4 class="name" id="stopMedia"><span class="type-signature">(async) </span>stopMedia<span class="signature">(socket)</span><span class="type-signature"></span></h4>
<div class="description">
Processes requests to stop currently playing media from client
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>socket</code></td>
<td class="type">
<span class="param-type">Socket</span>
</td>
<td class="description last">Socket we received the request from</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line188">line 188</a>
</li></ul></dd>
</dl>
<h4 class="name" id="stopScheduleTimers"><span class="type-signature">(async) </span>stopScheduleTimers<span class="signature">(noArchive)</span><span class="type-signature"></span></h4>
<div class="description">
Clears and scheduling timers
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Default</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>noArchive</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
true
</td>
<td class="description last">Disables Archiving</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line412">line 412</a>
</li></ul></dd>
</dl>
<h4 class="name" id="sync"><span class="type-signature"></span>sync<span class="signature">()</span><span class="type-signature"></span></h4>
<div class="description">
Sends a syncronization ping out to client Sockets and increments the tracked timestamp by the Synchronization Delta
Called auto-magically by the Synchronization Timer
</div>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line1095">line 1095</a>
</li></ul></dd>
</dl>
<h4 class="name" id="toggleLock"><span class="type-signature">(async) </span>toggleLock<span class="signature">(socket)</span><span class="type-signature"></span></h4>
<div class="description">
Handle client request to (un)lock queue
</div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>socket</code></td>
<td class="type">
<span class="param-type">Socket</span>
</td>
<td class="description last">Requesting socket</td>
</tr>
</tbody>
</table>
<dl class="details">
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
<a href="app_channel_media_queue.js.html">app/channel/media/queue.js</a>, <a href="app_channel_media_queue.js.html#line299">line 299</a>
</li></ul></dd>
</dl>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="activeChannel.html">activeChannel</a></li><li><a href="channelManager.html">channelManager</a></li><li><a href="chat.html">chat</a></li><li><a href="chatBuffer.html">chatBuffer</a></li><li><a href="chatHandler.html">chatHandler</a></li><li><a href="commandPreprocessor.html">commandPreprocessor</a></li><li><a href="commandProcessor.html">commandProcessor</a></li><li><a href="connectedUser.html">connectedUser</a></li><li><a href="media.html">media</a></li><li><a href="playlistHandler.html">playlistHandler</a></li><li><a href="queue.html">queue</a></li><li><a href="queuedMedia.html">queuedMedia</a></li><li><a href="tokebot.html">tokebot</a></li></ul><h3>Global</h3><ul><li><a href="global.html#authenticateSession">authenticateSession</a></li><li><a href="global.html#cache">cache</a></li><li><a href="global.html#channelBanSchema">channelBanSchema</a></li><li><a href="global.html#channelPermissionSchema">channelPermissionSchema</a></li><li><a href="global.html#channelSchema">channelSchema</a></li><li><a href="global.html#chatSchema">chatSchema</a></li><li><a href="global.html#comparePassword">comparePassword</a></li><li><a href="global.html#consoleWarn">consoleWarn</a></li><li><a href="global.html#daysToExpire">daysToExpire</a></li><li><a href="global.html#dumpError">dumpError</a></li><li><a href="global.html#emailChangeSchema">emailChangeSchema</a></li><li><a href="global.html#emoteSchema">emoteSchema</a></li><li><a href="global.html#errorHandler">errorHandler</a></li><li><a href="global.html#errorMiddleware">errorMiddleware</a></li><li><a href="global.html#escapeRegex">escapeRegex</a></li><li><a href="global.html#exceptionHandler">exceptionHandler</a></li><li><a href="global.html#exceptionSmith">exceptionSmith</a></li><li><a href="global.html#failedAttempts">failedAttempts</a></li><li><a href="global.html#fetchMetadata">fetchMetadata</a></li><li><a href="global.html#fetchVideoMetadata">fetchVideoMetadata</a></li><li><a href="global.html#fetchYoutubeMetadata">fetchYoutubeMetadata</a></li><li><a href="global.html#fetchYoutubePlaylistMetadata">fetchYoutubePlaylistMetadata</a></li><li><a href="global.html#flairSchema">flairSchema</a></li><li><a href="global.html#genCaptcha">genCaptcha</a></li><li><a href="global.html#getLoginAttempts">getLoginAttempts</a></li><li><a href="global.html#getMediaType">getMediaType</a></li><li><a href="global.html#hashIP">hashIP</a></li><li><a href="global.html#hashPassword">hashPassword</a></li><li><a href="global.html#kickoff">kickoff</a></li><li><a href="global.html#killSession">killSession</a></li><li><a href="global.html#lifetime">lifetime</a></li><li><a href="global.html#localExceptionHandler">localExceptionHandler</a></li><li><a href="global.html#mailem">mailem</a></li><li><a href="global.html#markLink">markLink</a></li><li><a href="global.html#maxAttempts">maxAttempts</a></li><li><a href="global.html#mediaSchema">mediaSchema</a></li><li><a href="global.html#passwordResetSchema">passwordResetSchema</a></li><li><a href="global.html#permissionSchema">permissionSchema</a></li><li><a href="global.html#playlistMediaProperties">playlistMediaProperties</a></li><li><a href="global.html#playlistSchema">playlistSchema</a></li><li><a href="global.html#processExpiredAttempts">processExpiredAttempts</a></li><li><a href="global.html#queuedProperties">queuedProperties</a></li><li><a href="global.html#rankEnum">rankEnum</a></li><li><a href="global.html#refreshRawLink">refreshRawLink</a></li><li><a href="global.html#schedule">schedule</a></li><li><a href="global.html#securityCheck">securityCheck</a></li><li><a href="global.html#sendAddressVerification">sendAddressVerification</a></li><li><a href="global.html#socketCriticalExceptionHandler">socketCriticalExceptionHandler</a></li><li><a href="global.html#socketErrorHandler">socketErrorHandler</a></li><li><a href="global.html#socketExceptionHandler">socketExceptionHandler</a></li><li><a href="global.html#spent">spent</a></li><li><a href="global.html#statSchema">statSchema</a></li><li><a href="global.html#throttleAttempts">throttleAttempts</a></li><li><a href="global.html#tokeCommandSchema">tokeCommandSchema</a></li><li><a href="global.html#transporter">transporter</a></li><li><a href="global.html#typeEnum">typeEnum</a></li><li><a href="global.html#userBanSchema">userBanSchema</a></li><li><a href="global.html#userSchema">userSchema</a></li><li><a href="global.html#verify">verify</a></li><li><a href="global.html#yankMedia">yankMedia</a></li><li><a href="global.html#ytdlpFetch">ytdlpFetch</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Sat Sep 06 2025 19:07:56 GMT-0400 (Eastern Daylight Time)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>