diff --git a/src/zm_monitorstream.cpp b/src/zm_monitorstream.cpp
index f904f23cf..85b223f6a 100644
--- a/src/zm_monitorstream.cpp
+++ b/src/zm_monitorstream.cpp
@@ -553,7 +553,7 @@ void MonitorStream::runStream() {
Debug( 2, "Assigned temporary buffer" );
}
}
- }
+ } // end if connkey & playback_buffer
float max_secs_since_last_sent_frame = 10.0; //should be > keep alive amount (5 secs)
while ( !zm_terminate ) {
diff --git a/web/ajax/stream.php b/web/ajax/stream.php
index 7f050bda8..2d4c3c612 100644
--- a/web/ajax/stream.php
+++ b/web/ajax/stream.php
@@ -44,7 +44,7 @@ switch ( $_REQUEST['command'] ) {
$remSockFile = ZM_PATH_SOCKS.'/zms-'.sprintf("%06d",$_REQUEST['connkey']).'s.sock';
$max_socket_tries = 10;
while ( !file_exists($remSockFile) && $max_socket_tries-- ) { //sometimes we are too fast for our own good, if it hasn't been setup yet give it a second.
- usleep(200000);
+ usleep(2000000);
}
if ( !file_exists($remSockFile) ) {
diff --git a/web/skins/classic/views/js/montage.js b/web/skins/classic/views/js/montage.js
index 2a4badccc..c2f96258c 100644
--- a/web/skins/classic/views/js/montage.js
+++ b/web/skins/classic/views/js/montage.js
@@ -87,8 +87,12 @@ function Monitor( monitorData ) {
} else {
console.error( respObj.message );
// Try to reload the image stream.
- if ( stream )
+ if ( stream ) {
+ console.log('Reloading stream: ' + stream.src );
stream.src = stream.src.replace(/rand=\d+/i, 'rand='+Math.floor((Math.random() * 1000000) ));
+ } else {
+ console.log( 'No stream to reload?' );
+ }
}
var streamCmdTimeout = statusRefreshTimeout;
if ( this.alarmState == STATE_ALARM || this.alarmState == STATE_ALERT )
@@ -147,7 +151,7 @@ console.log("applying " + style + ': ' + styles[style]);
if ( ! layout ) {
return;
}
- Cookie.write( 'zmMontageLayout', layout, { duration: 10*365 } );
+ Cookie.write( 'zmMontageLayout', layout_id, { duration: 10*365 } );
if ( layout_id != 1 ) { // 'montage_freeform.css' ) {
Cookie.write( 'zmMontageScale', '', { duration: 10*365 } );
$('scale').set('value', '' );
@@ -264,6 +268,42 @@ function initPage() {
monitors[i].start( delay );
}
selectLayout($('layout'));
+
+ $j('#monitors .monitorFrame').draggable({
+ cursor: 'crosshair',
+ revert: 'invalid'
+ });
+
+ function toGrid(value) {
+ return Math.round(value / 80) * 80;
+ }
+
+ $j('#monitors').droppable({
+ accept: '#monitors .monitorFrame',
+ drop: function(event, ui) {
+ //console.log(event);
+ $j(this).removeClass('border over');
+ $j(ui.draggable).detach().
+ appendTo($j(this).find('ul')).
+ draggable({
+ containment: '.fw-content',
+ cursor: 'help',
+ grid: [ 80, 80 ]
+ }).
+ css({
+ position: 'absolute',
+ left: toGrid(event.clientX - $j('#monitors').offset().left),
+ top: toGrid(event.clientY - $j('#monitors').offset().top)
+ });
+ },
+ over: function(event, elem) {
+ console.log('over');
+ $j(this).addClass('over');
+ },
+ out: function(event, elem) {
+ $j(this).removeClass('over');
+ }
+ });
}
// Kick everything off
diff --git a/web/skins/classic/views/montage.php b/web/skins/classic/views/montage.php
index fa5352563..fe9d688e0 100644
--- a/web/skins/classic/views/montage.php
+++ b/web/skins/classic/views/montage.php
@@ -103,6 +103,35 @@ ob_end_clean();
$groupSql = Group::get_group_sql( $group_id );
+$servers = Server::find_all();
+$ServersById = array();
+foreach ( $servers as $S ) {
+ $ServersById[$S->Id()] = $S;
+}
+session_start();
+foreach ( array('ServerFilter','StorageFilter') as $var ) {
+ if ( isset( $_REQUEST[$var] ) ) {
+ if ( $_REQUEST[$var] != '' ) {
+ $_SESSION[$var] = $_REQUEST[$var];
+ } else {
+ unset( $_SESSION[$var] );
+ }
+ } else if ( isset( $_COOKIE[$var] ) ) {
+ if ( $_COOKIE[$var] != '' ) {
+ $_SESSION[$var] = $_COOKIE[$var];
+ } else {
+ unset($_SESSION[$var]);
+ }
+ }
+}
+session_write_close();
+
+$storage_areas = Storage::find_all();
+$StorageById = array();
+foreach ( $storage_areas as $S ) {
+ $StorageById[$S->Id()] = $S;
+}
+
$monitor_id = 0;
if ( isset( $_REQUEST['monitor_id'] ) ) {
$monitor_id = $_REQUEST['monitor_id'];
@@ -112,15 +141,46 @@ if ( isset( $_REQUEST['monitor_id'] ) ) {
$monitors = array();
$monitors_dropdown = array( '' => 'All' );
-$sql = "SELECT * FROM Monitors WHERE Function != 'None'";
-if ( $groupSql ) { $sql .= ' AND ' . $groupSql; };
-if ( $monitor_id ) { $sql .= ' AND Id='.$monitor_id; };
+ $conditions = array();
+ $values = array();
-$sql .= ' ORDER BY Sequence';
-foreach( dbFetchAll( $sql ) as $row ) {
+ if ( $groupSql )
+ $conditions[] = $groupSql;
+ if ( isset($_SESSION['ServerFilter']) ) {
+ $conditions[] = 'ServerId=?';
+ $values[] = $_SESSION['ServerFilter'];
+ }
+ if ( isset($_SESSION['StorageFilter']) ) {
+ $conditions[] = 'StorageId=?';
+ $values[] = $_SESSION['StorageFilter'];
+ }
+ $sql = 'SELECT * FROM Monitors' . ( count($conditions) ? ' WHERE ' . implode(' AND ', $conditions ) : '' ).' ORDER BY Sequence ASC';
+ $monitor_rows = dbFetchAll( $sql, null, $values );
+
+ if ( $monitor_id ) {
+ $found_selected_monitor = false;
+
+ for ( $i = 0; $i < count($monitor_rows); $i++ ) {
+ if ( !visibleMonitor( $monitor_rows[$i]['Id'] ) ) {
+ continue;
+ }
+ $monitors_dropdown[$monitor_rows[$i]['Id']] = $monitor_rows[$i]['Name'];
+ if ( $monitor_rows[$i]['Id'] == $monitor_id ) {
+ $found_selected_monitor = true;
+ }
+ }
+ if ( ! $found_selected_monitor ) {
+ $monitor_id = '';
+ }
+ }
+
+$monitors = array();
+foreach( $monitor_rows as $row ) {
if ( !visibleMonitor( $row['Id'] ) ) {
continue;
}
+ if ( $monitor_id and $row['Id'] != $monitor_id )
+ continue;
$row['Scale'] = $scale;
$row['PopupScale'] = reScale( SCALE_BASE, $row['DefaultScale'], ZM_WEB_DEFAULT_SCALE );
@@ -169,6 +229,23 @@ if ( $showZones ) {
'changeMonitor(this);') ); ?>
+ 0 ) { ?>
+
+'All')+$ServersById, (isset($_SESSION['ServerFilter'])?$_SESSION['ServerFilter']:''), array('onchange'=>'changeFilter(this);') );
+?>
+
+ 0 ) { ?>
+
+'All')+$StorageById, (isset($_SESSION['StorageFilter'])?$_SESSION['StorageFilter']:''), array('onchange'=>'changeFilter(this);') );
+?>
+
+